Row polymorphism
必要なフィールドの存在だけを要求するRecordの型を書ける
OCamlにもあるらしい
{ a :: A | r }と書けば、
{ a :: A}は許容する
{ a :: A, b :: B }も許容する
{ b :: B, c :: C}は許容しない
row
key/typesの集合
e.g. { x : Int, y : Int }
まだ分からない残りのフィールドを表す変数
例
code:purs(hs)
{ x : Int | r }
x : Int は必須
フィールド追加も表現できる
code:purs(hs)
addY : { x : Int | r } -> { x : Int, y : Int | r }
フィールド削除も表現できる
code:purs(hs)
removeY : { y : Int | r } -> { r }
参考
hsに入れるproposal